#ifndef __DICTPRODUCER_H__
#define __DICTPRODUCER_H__

#include "SplitTool.h"
#include "Configuration.h"
#include <vector>
#include <unordered_map>
#include <set>
#include <string>

using namespace std;

class DictProducer
{
public: 
    DictProducer(const string& dir,SplitTool& split,Configuration& conf);
    ~DictProducer();

    // 创建英文词典
    void buildEnDict();
    // 创建中文词典
    void buildCnDict();
    // 创建中英文词典索引库（中英文都可以用）
    void buildIndex();
    // 将词典写入到文件中
    void storeDict(const string& filepath);
    // 将词典索引写入到文件中
    void storeIndex(const string& filepath);

private:
    // 获取语料路径下的所有文件
    void getFile();    

    // 判断该字符有多少字节（用来区分是中文字符还是英文字符）
    size_t nBytesCode(const char ch);

    void mapTransformVec();
    
private:
    vector<string> _files;  // 存储语料路径下的文件
    unordered_map<string, int> _dict;   // 存储单词和词频
    unordered_map<string, set<int>> _index;   // 词典索引
    vector<pair<string,int>> _vecDict;    // 将map词典转换成vector结构
    string _dir;   // 语料的路径
    SplitTool& _split;  // 结巴分词对象
    Configuration& _conf;  // 配置文件类对象
};

#endif